/**
 * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
 */
package com.jeeplus.modules.xs_user.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jeeplus.core.persistence.Page;
import com.jeeplus.core.service.CrudService;
import com.jeeplus.common.utils.StringUtils;
import com.jeeplus.modules.xs_user.entity.XsUser;
import com.jeeplus.modules.xs_user.mapper.XsUserMapper;
import com.jeeplus.modules.xs_user.entity.XsUserAssets;
import com.jeeplus.modules.xs_user.mapper.XsUserAssetsMapper;
import com.jeeplus.modules.xs_user.entity.XsUserRelated;
import com.jeeplus.modules.xs_user.mapper.XsUserRelatedMapper;

/**
 * 用户信息Service
 * @author 天竹子
 * @version 2021-07-15
 */
@Service
@Transactional(readOnly = true)
public class XsUserService extends CrudService<XsUserMapper, XsUser> {

	@Autowired
	private XsUserAssetsMapper xsUserAssetsMapper;
	@Autowired
	private XsUserRelatedMapper xsUserRelatedMapper;

	public XsUser get(String id) {
		XsUser xsUser = super.get(id);
		xsUser.setXsUserAssetsList(xsUserAssetsMapper.findList(new XsUserAssets(xsUser)));
		xsUser.setXsUserRelatedList(xsUserRelatedMapper.findList(new XsUserRelated(xsUser)));
		return xsUser;
	}

	public List<XsUser> findList(XsUser xsUser) {
		return super.findList(xsUser);
	}

	public Page<XsUser> findPage(Page<XsUser> page, XsUser xsUser) {
		return super.findPage(page, xsUser);
	}

	@Transactional(readOnly = false)
	public void save(XsUser xsUser) {
		super.save(xsUser);
		for (XsUserAssets xsUserAssets : xsUser.getXsUserAssetsList()){
			if (xsUserAssets.getId() == null){
				continue;
			}
			if (XsUserAssets.DEL_FLAG_NORMAL.equals(xsUserAssets.getDelFlag())){
				if (StringUtils.isBlank(xsUserAssets.getId())){
					xsUserAssets.setUser(xsUser);
					xsUserAssets.preInsert();
					xsUserAssetsMapper.insert(xsUserAssets);
				}else{
					xsUserAssets.preUpdate();
					xsUserAssetsMapper.update(xsUserAssets);
				}
			}else{
				xsUserAssetsMapper.delete(xsUserAssets);
			}
		}
		for (XsUserRelated xsUserRelated : xsUser.getXsUserRelatedList()){
			if (xsUserRelated.getId() == null){
				continue;
			}
			if (XsUserRelated.DEL_FLAG_NORMAL.equals(xsUserRelated.getDelFlag())){
				if (StringUtils.isBlank(xsUserRelated.getId())){
					xsUserRelated.setUser(xsUser);
					xsUserRelated.preInsert();
					xsUserRelatedMapper.insert(xsUserRelated);
				}else{
					xsUserRelated.preUpdate();
					xsUserRelatedMapper.update(xsUserRelated);
				}
			}else{
				xsUserRelatedMapper.delete(xsUserRelated);
			}
		}
	}

	@Transactional(readOnly = false)
	public void delete(XsUser xsUser) {
		super.delete(xsUser);
		xsUserAssetsMapper.delete(new XsUserAssets(xsUser));
		xsUserRelatedMapper.delete(new XsUserRelated(xsUser));
	}

}